package com.com.itext.day1;

import com.itextpdf.io.font.FontConstants;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.UnitValue;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.StringTokenizer;

//测试生成表格
public class demo4 {
    public static void main(String[] args) throws Exception {
        PdfWriter writer = new PdfWriter("D:\\测试pdf\\day1_4.pdf");
        PdfDocument document = new PdfDocument(writer);
        //创建一个A4大小的pdf默认是纵向的rotate旋转pdf
        Document doc = new Document(document, PageSize.A4.rotate());
        PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA);
        PdfFont bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);
        //创建一个每行9列的表格每个格子的宽度为
        Table table = new Table(new float[]{4, 1, 3, 4, 3, 3, 3, 3, 1});
        table.setWidth(UnitValue.createPercentValue(100));
        BufferedReader br = new BufferedReader(new FileReader("D:\\测试pdf\\united_states.csv"));
        String line = br.readLine();
        process(table,line,bold,true);
        while((line = br.readLine()) != null){
            process(table,line,font,false);
        }
        br.close();
        doc.add(table);
        doc.close();
    }
    public static void process(Table table ,String line ,PdfFont font,boolean isHeader){
        StringTokenizer tokenizer = new StringTokenizer(line,";");
        while (tokenizer.hasMoreTokens()){
            if(isHeader){
                table.addHeaderCell(new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font)));
            }else{
                table.addCell(new Cell().add(new Paragraph(tokenizer.nextToken())).setFont(font));
            }
        }
    }
}
/*
* * 如果你把在样板代码细看UnitedStates的例子，你会发现，我们已经做了小改动的行创建Document（4号线）。
* 我们添加了一个额外的参数来定义页面的大小Document。默认页面大小为A4，默认情况下该页面用于纵向。
* 在这个例子中，我们也使用A4，但是我们旋转页面（PageSize.A4.rotate()）以便在横向中使用它，
* 如图1.4所示。我们也改变了利润率（第5行）。默认情况下，iText使用36个用户单位（半英寸）的边距。
* 我们将所有边距更改为20个用户单位（此术语将在文中进一步说明）。
*
*
*
* 在此示例中，我们逐行读取此CSV文件，并将CSV文件中存在的所有数据放在Table对象中。

我们首先创建PdfFont同一系列的两个对象：Helvetica regular（第5行）和Helvetica bold（第6行）。
我们Table通过定义一个float包含九个元素的数组（第7行）来创建一个我们定义九列的对象。
每个都float定义了列的相对宽度。第一列的宽度是第二列的四倍; 第三列是第二列的三倍宽; 等等。
我们还定义了表格相对于页面可用宽度的宽度（第8行）。在这种情况下，表格将使用页面宽度的100％减去页面边距。

然后我们开始读取CSV文件，其路径存储在DATA常量中（第9行）。我们读取第一行以获取列标题（第10行），
然后我们处理该行（第11行）。我们编写了一个process()方法，它将使用特定的内容添加line到定义是否包含标
题行的内容。tablefontline

我们使用a StringTokenizer循环遍历CSV文件的每一行中存储的所有字段。我们创建Paragraph一个特定的font。我们将它添加Paragraph到一个新Cell对象。根据我们是否处理标题行，我们将其添加Cell到table标题单元格或普通单元格中。

在我们处理了标题行（第11行）之后，我们遍历其余的行（第12行），然后我们处理剩下的行（第13行）。
从图1.4可以看出，该表不适合单个页面。没有必要担心：iText将根据需要创建任意数量的新页面，
直到呈现完整的表格。iText也将重复标题行，因为我们使用addHeaderCell()方法insead使用该addCell()
方法添加了该行的单元格。

一旦我们读完了数据（第14 table行），我们就将文件添加到文档（第16行），然后关闭它（第17行）。
我们已成功以PDF格式发布CSV文件。

那很简单。由于只有有限数量的代码行，我们已经用PDF创建了一个很好的表格。
* */